package com.zhiche.lisa.lspm.service.lsp;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zhiche.lisa.core.supports.BaseException;
import com.zhiche.lisa.lspm.dao.model.lsp.LspCreateLog;
import com.zhiche.lisa.lspm.dao.model.lsp.LspInfo;
import com.zhiche.lisa.lspm.dao.model.lsp.bo.*;
import com.zhiche.lisa.lspm.dao.model.sys.User;
import com.zhiche.lisa.lspm.dto.ArFundDTO;
import com.zhiche.lisa.lspm.vo.lsp.*;

import java.util.List;
import java.util.Map;

/**
 * 承运商 service
 *
 * @author lbl
 * @since 2018-05-23
 */
public interface LspInfoService extends IService<LspInfo> {

    /**
     * 承运商列表
     */
    Page<LspBasicVO> lspInfoLine(Page<LspInfoLineVO> page, String authorization);

    /**
     * 承运商拉黑列表
     */
    Page<LspBlackLineVO> lspBlackLine(Page<LspBlackBO> page);

    /**
     * 拉黑
     */
    void lspInBlack(Integer ispId, String inlistReason);

    /**
     * 取消拉黑
     */
    void lspCleanBlack(Integer ispId, String outlistReason);

    /**
     * 承运商认证列表
     */
    Page<LspAuthLineVO> lspAuthLine(Page<LspAuthLineBO> page);


    /**
     * 认证的承运商列表
     */
    Page<AfterAuthLspLineVO> afterAuthLspLine(Page<AfterAuthLspLineBO> page);

    /**
     * 添加承运商基础信息
     */
    void addLspInfo(ModifyLspInfoBO modifyLspInfoBO, String authorization);

    /**
     * 修改附件信息
     */
    void updateLicense(ModifyLspInfoBO modifyLspInfoBO);

    /**
     * 删除所附加的附件信息
     */
    void deleteLicense(ModifyLspLicenseBO modifyLspLicenseBO);

    /**
     * 根据承运商 code 查找承运商相关信息
     */
    ModifyLspInfoBO findByCode(String code);

    /**
     * 查找编辑承运商信息
     */
    ModifyLspInfoBO findModifyInfo(Long id);

    /**
     * 获取承运商下的证照
     */
    List<ModifyLspLicenseBO> findLicenseById(Long id);

    /**
     * 编辑承运商基础信息
     */
    void modifyLspInfo(ModifyLspInfoBO modifyLspInfoBO, String authorization);

    /**
     * 校验添加/编辑数据
     */
    void checkModifyData(ModifyLspInfoBO modifyLspInfoBO, String operate);

    /**
     * 承运商认证
     */
    List<String> lspAuth(Long[] lspIds) throws BaseException;

    LspInfo replaceServiceType(LspInfo lspInfo);

    /**
     * 取消认证
     */
    void cancelAuth(Long[] lspIds) throws BaseException;

    /**
     * 模糊查询承运商信息
     */
    List<LspInfo> vagueSelectLsp(String name);

    /**
     * 停用承运商
     */
    void discontinuatLsps(Long[] lspIds) throws BaseException;

    /**
     * 启用承运商
     */
    void enableLsps(Long[] lspIds) throws BaseException;

    List<String> deleteByIds(Long[] lspIds, String token);

    /**
     * 得到登录的承运商信息
     */
    LspBasicVO getLonginLspInfo();

    Long getLspIdByTenantId(Long tenantId);

    /**
     * 通过uaa传过来的信息更新承运商/司机/牵引车/挂车id
     */
    void updateTenantId(String TenantId);

    /**
     * 根据uaa创建账号的信息来处理承运商数据
     */
    Map<String, Object> insertLspInfo(LspCreateLog lspCreateLog);

    /**
     * 承运商添加信息推送到微信公众号创建账号
     *
     * @param taxpayerId 纳说人识别号
     */
    void lspSendMessage(LspInfo lspInfo, String taxpayerId, Integer isOpenUp, String authorization);


    void unlockAccount(Long tenantId, String authorization);

    /**
     * 获取uaa传过来的承运商数据
     */
    void getLspIfon(String tenantVO);

    /**
     * 更新承运商信息
     */
    LspBasicVO updateLspInfo(LspBasicVO lspInfo, String authorization);

    /**
     * 获取承运商信息
     */
    LspBasicVO getLspBasic(Long lspId);

    /**
     * 获取承运商信息
     */
    LspInfo getLspByLspIdNoTenant(Long lspId);

    /**
     * 获取公司信息
     */
    LspBasicVO getLspByLoginAccount();

    /**
     * 创建承运商
     */
    void registLsp(TenantInfoVO tenantInfoVO);


    /**
     * 开通账号列表
     */
    Page<LspAccountVO> openAccountList(Page<LspAccountVO> page, String authorization);

    /**
     * 根据id号，恢复指定承运商的删除状态
     */
    List<String> updateDeleteStatus(List<Long> ids, String token);

    /**
     * 根据承运商Id批量获取承运商信息
     */
    List<LspInfo> getLspName(List<Long> lspIds);

    /**
     * 获取所有认证的承运商
     */
    List<LspInfo> getAuthLsp();

    /**
     * 根据租户id查询承运商信息
     */
    LspInfo queryLspInfoByTenantId(Long tenantId);

    /**
     * 根据租户id查询承运商信息
     */
    String lspToOtm(Long id);

    /**
     * 批量获取承运商信息
     */
    List<LspInfo> getLspInfoAll(List<LspInfo> lspInfo);

    EntityWrapper<LspInfo> queryLspInfoCheck(Map<String, Object> condition);

    Map<Long,Long> queryLspByName(List<ArFundDTO> arFundDTOS);

    /**
     * 查询承运商，不进行租户过滤
     */
    List<LspInfo> selectListNoTenant(Wrapper<LspInfo> ew);

    /**
     * 查询登录用户信息
     */
    UserInfoVO queryUserInfo(String phone);

    LspInfo selectByIdNoTenant(Long lspId);

    /**
     *   查询用户openId和手机号码
     */
    Map<String,Object> queryUserOpenId(String phone);

    /**
     *   新增用户openId
     */
    String addUserOpenId(User user);

    /**
     * 禁用承运商
     * @param condition
     * @param authorization
     * @return
     */
    String disableLsp(LspBasicVO condition, String authorization);

    /**
     * 启用承运商
     * @param condition
     * @return
     */
    String enableLspInfo(LspBasicVO condition);

    LspInfo selectLspInfo(Long id);

    LspInfo selectLspInfoByDriverId(Long id);
}
